package cn.jsj.dao;

import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;

import cn.jsj.pojo.TblBankAccount;
import cn.jsj.pojo.TblCashCheque;

/**
 * 现金支票处理类
 * @author LI
 *
 */

public class TblCashChequeDAO  {
	/**
	 * 获得现金支票信息条数
	 * @return：现金支票信息总条数
	 */
	public int getCashChequeNumb(){
		// 取得session对象
		org.hibernate.Session session = HBUtils.getSession();
		// 新建事务对象
		org.hibernate.Transaction tx = session.beginTransaction();
		// 开始事务
		tx.begin();
		String hql="select count(*) from TblCashCheque";
	    List result=session.createQuery(hql)
		.list();
		// 提交事务
		tx.commit();
		session.close();
		//获得结果的迭代器
		 ListIterator iterator = result.listIterator();
		 Long rows =(Long)iterator.next();
		 return Integer.parseInt(rows.toString());
	}

	/**
	 * 获得某个页面的现金支票信息
	 * @param startNumb：从第几条开始
	 * @param totalNumb：总共几条
	 * @return：现金支票信息队列
	 */
	public java.util.List<TblCashCheque> getCashCheque(int startNumb,int totalNumb){
		// 取得session对象
		org.hibernate.Session session = HBUtils.getSession();
		// 新建事务对象
		org.hibernate.Transaction tx = session.beginTransaction();
		// 开始事务
		tx.begin();
		List result=session.createCriteria(TblCashCheque.class)
		.addOrder(org.hibernate.criterion.Order.desc("cashChequeTime"))
		.setFirstResult(startNumb)
		.setMaxResults(totalNumb)
		.list();
		// 提交事务
		tx.commit();
		session.close();
		return result;
	}

	/**
	 * 获得符合搜索条件的现金支票条数
	 * @param sbp：后台与DB进行交互的对象
	 * @return：现金支票信息条数
	 */
	public int getSearchChequeNumb(cn.jsj.bgtodb.SearchChequeProperty scp){

		// 取得session对象
		org.hibernate.Session session = HBUtils.getSession();
		// 新建事务对象
		org.hibernate.Transaction tx = session.beginTransaction();
		// 开始事务
		tx.begin();
		List result=new LinkedList();
		//如果用户没有输入月份
		if(scp.getChequeMonth().length()==0){
			//根据输入的字符串构造出要搜索的时间段
			String begin=scp.getChequeYear()+"-01"+"-01";
			java.util.Date beginDate=cn.jsj.utils.TimeDispose.transferDate(begin);
			String end=scp.getChequeYear()+"-12"+"-31";
			java.util.Date endDate=cn.jsj.utils.TimeDispose.transferDate(end);
			//查询在这个时间段记录的条数
			String hql="select count(*) from TblCashCheque tcc where tcc.cashChequeTime between?and?";
		    result=session.createQuery(hql)
			.setDate(0, beginDate)
			.setDate(1, endDate)
			.list();
		    // 提交事务
			tx.commit();
			session.close();

			//获得结果的迭代器
			 ListIterator iterator = result.listIterator();
			 Long rows =(Long)iterator.next();
			 return Integer.parseInt(rows.toString());

		}
		//如果输入了月份
		else{
			//根据输入的字符串构造出要搜索的时间段
			String begin=scp.getChequeYear()+"-"+scp.getChequeMonth()+"-01";
			java.util.Date beginDate=cn.jsj.utils.TimeDispose.transferDate(begin);
			//判断这个月有没有31号
			int month=Integer.parseInt(scp.getChequeMonth());
			//结束日子
			String end="";
			if(month<8&&month%2==1){
				 end=scp.getChequeYear()+"-"+scp.getChequeMonth()+"-31";
			}
			if(month<8&&month%2==0)
			{
				end=scp.getChequeYear()+"-"+scp.getChequeMonth()+"-30";
			}
			if(month>=8&&month%2==0){
				end=scp.getChequeYear()+"-"+scp.getChequeMonth()+"-31";
			}
			if(month>=8&&month%2==1){
				end=scp.getChequeYear()+"-"+scp.getChequeMonth()+"-30";
			}
			java.util.Date endDate=cn.jsj.utils.TimeDispose.transferDate(end);
			//查询在这个时间段记录的条数
			String hql="select count(*) from TblCashCheque tcc where tcc.cashChequeTime between?and?";
		    result=session.createQuery(hql)
			.setDate(0, beginDate)
			.setDate(1, endDate)
			.list();
		    // 提交事务
			tx.commit();
			session.close();

			//获得结果的迭代器
			 ListIterator iterator = result.listIterator();
			 Long rows =(Long)iterator.next();
			 return Integer.parseInt(rows.toString());
		}
		}


	/**
	 * 获得符合搜索条件的某个页面现金支票
	 * @param sbp：后台与DB进行交互的对象
	 * @return：现金支票信息队列
	 */
	public java.util.List<TblCashCheque> getSearchCheque(cn.jsj.bgtodb.SearchChequeProperty scp){

		// 取得session对象
		org.hibernate.Session session = HBUtils.getSession();
		// 新建事务对象
		org.hibernate.Transaction tx = session.beginTransaction();
		// 开始事务
		tx.begin();
		List result=new LinkedList();
		//如果用户没有输入月份
		if(scp.getChequeMonth().length()==0){
			//根据输入的字符串构造出要搜索的时间段
			String begin=scp.getChequeYear()+"-01"+"-01";
			java.util.Date beginDate=cn.jsj.utils.TimeDispose.transferDate(begin);
			String end=scp.getChequeYear()+"-12"+"-31";
			java.util.Date endDate=cn.jsj.utils.TimeDispose.transferDate(end);
			//查询在这个时间段记录
			result=session.createCriteria(TblCashCheque.class)
			.add(org.hibernate.criterion.Restrictions.between("cashChequeTime", beginDate, endDate))
			.addOrder(org.hibernate.criterion.Order.desc("cashChequeTime"))
			.setFirstResult(scp.getStartNumb())
			.setMaxResults(scp.getTotalNumb())
			.list();

		}
		//如果输入了月份
		else{
			//根据输入的字符串构造出要搜索的时间段
			String begin=scp.getChequeYear()+"-"+scp.getChequeMonth()+"-01";
			java.util.Date beginDate=cn.jsj.utils.TimeDispose.transferDate(begin);
			//判断这个月有没有31号
			int month=Integer.parseInt(scp.getChequeMonth());
			//结束日子
			String end="";
			if(month<8&&month%2==1){
				 end=scp.getChequeYear()+"-"+scp.getChequeMonth()+"-31";
			}
			if(month<8&&month%2==0)
			{
				end=scp.getChequeYear()+"-"+scp.getChequeMonth()+"-30";
			}
			if(month>=8&&month%2==0){
				end=scp.getChequeYear()+"-"+scp.getChequeMonth()+"-31";
			}
			if(month>=8&&month%2==1){
				end=scp.getChequeYear()+"-"+scp.getChequeMonth()+"-30";
			}
			java.util.Date endDate=cn.jsj.utils.TimeDispose.transferDate(end);
			//查询在这个时间段记录
			result=session.createCriteria(TblCashCheque.class)
			.add(org.hibernate.criterion.Restrictions.between("cashChequeTime", beginDate, endDate))
			.addOrder(org.hibernate.criterion.Order.desc("cashChequeTime"))
			.setFirstResult(scp.getStartNumb())
			.setMaxResults(scp.getTotalNumb())
			.list();
		}
		// 提交事务
		tx.commit();
		session.close();
			return result;
		}
	/**
	 * 保存现金支票信息
	 * @param tcc：现金支票信息对象
	 * @return:1 保存成功
	 */
	public int saveCashChequeInfo(cn.jsj.pojo.TblCashCheque tcc){
		// 取得session对象
		org.hibernate.Session session = HBUtils.getSession();
		// 新建事务对象
		org.hibernate.Transaction tx = session.beginTransaction();
		// 开始事务
		tx.begin();
		session.save(tcc);
		// 提交事务
		tx.commit();
		session.close();
		return 1;
	}

	/**
	 * 更新现金支票信息
	 * @param tba：现金支票对象
	 * @return：1：更新成功
	 */
	public int updateCashChequeInfo(cn.jsj.pojo.TblCashCheque tcc){
		// 取得session对象
		org.hibernate.Session session = HBUtils.getSession();
		// 新建事务对象
		org.hibernate.Transaction tx = session.beginTransaction();
		// 开始事务
		tx.begin();
		session.update(tcc);
		// 提交事务
		tx.commit();
		session.close();
		return 1;
	}
}